package com.example.apidocserver.domain.document.service;

import com.example.apidocserver.domain.document.entity.ApiInfo;
import com.example.apidocserver.domain.document.entity.ApiParamHis;

import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
 * 不同环境模拟参数(ApiParamHis)表服务接口
 *
 * @author makejava
 * @since 2023-02-24 22:57:45
 */
public interface ApiParamHisService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    ApiParamHis queryById(Integer id);

    /**
     * 查询所有对象
     *
     * @return 查询结果
     */
    List<ApiParamHis> queryAll();

    /**
     * 根据对象查询
     *
     * @param apiParamHis 筛选条件
     * @return 查询结果
     */
    List<ApiParamHis> queryByEntity(ApiParamHis apiParamHis);

    /**
     * 新增数据
     *
     * @param apiParamHis 实例对象
     * @param now         当前时间
     * @return 实例对象
     */
    ApiParamHis insert(ApiParamHis apiParamHis, Date now);

    /**
     * 修改数据
     *
     * @param apiParamHis 实例对象
     * @return 实例对象
     */
    ApiParamHis update(ApiParamHis apiParamHis);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Integer id);

    /**
     * 根据接口id 和 请求头参数参数查询接口参数示例
     *
     * @param apiId    接口id
     * @param paramStr 请求头字符串对象
     * @return 接口示例对象
     */
    List<ApiParamHis> queryByApiIdAndInputHeader(Integer apiId, String paramStr);

    /**
     * 根据接口id 和 参数查询接口参数示例
     *
     * @param apiId 接口id
     * @return 路径参数示例集合
     */
    List<String> queryByApiId(Integer apiId);

    /**
     * 根据接口id 和 参数查询接口参数示例
     *
     * @param apiId    接口id
     * @param paramStr 查询参数字符串对象
     * @return 接口示例对象
     */
    List<ApiParamHis> queryByApiIdAndInputQuery(Integer apiId, String paramStr);

    /**
     * 根据接口id 和 参数查询接口参数示例
     *
     * @param apiId    接口id
     * @param paramStr 查询body字符串对象
     * @return 接口示例对象
     */
    List<ApiParamHis> queryByApiIdAndInputBody(Integer apiId, String paramStr);

    /**
     * 根据接口id 和 参数查询接口参数示例
     *
     * @param apiId    接口id
     * @param paramStr 返回头字符串对象
     * @return 接口示例对象
     */
    List<ApiParamHis> queryByApiIdAndOutputHeader(Integer apiId, String paramStr);

    /**
     * 根据接口id 和 参数查询接口参数示例
     *
     * @param apiId    接口id
     * @param paramStr 返回体字符串对象
     * @return 接口示例对象
     */
    List<ApiParamHis> queryByApiIdAndOutputBody(Integer apiId, String paramStr);


    /**
     * 入参是否为新曾参数说明
     *
     * @param paramInputBodyStr 入参字符串
     * @param apiInfo           接口信息
     * @return 是否为新入参
     */
    boolean isNewInputBody(String paramInputBodyStr, ApiInfo apiInfo);

    /**
     * 出参是否为新曾参数说明
     *
     * @param paramOutputBodyStr 出参对象
     * @param apiInfo            接口信息
     * @return 是否是新出参
     */
    boolean isNewOutputBody(String paramOutputBodyStr, ApiInfo apiInfo);

    /**
     * 查询已有示例的接口id
     *
     * @param apiIdSet 接口id集合
     * @return 接口id集合
     */
    List<Integer> findApiIdByApiIds(Collection<Integer> apiIdSet);

    /**
     * 批量插入
     *
     * @param apiParamHisNewList 示例集合
     */
    void insertBatch(List<ApiParamHis> apiParamHisNewList);
}
